home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / libx11 / include / x11 / wc / wccreatep.h < prev   
C/C++ Source or Header  |  1999-01-01  |  12KB  |  348 lines

  1. #ifndef _WcCreateP_h
  2. #define _WcCreateP_h
  3. #include <X11/Wc/COPY>
  4.  
  5. /*
  6. * SCCS_data: @(#) WcCreateP.h    1.7 92/06/10 06:11:14
  7. *
  8. * Widget Creation Library - WcCreateP.h
  9. *
  10. * Private defines for the Widget Creation Library.  Clients generally
  11. * should not need to include this file.
  12. *
  13. * Anything and everything in here may change dramatically.
  14. *
  15. *******************************************************************************
  16. */
  17.  
  18. #include <ctype.h>        /* isupper, tolower, atoi macros */
  19. #include <X11/Wc/WcCreate.h>
  20. #include <X11/Wc/MapAg.h>
  21.  
  22. /*
  23. *******************************************************************************
  24. * Private_constant_declarations.
  25. *******************************************************************************
  26. */
  27.  
  28. #undef  NUL
  29. #define NUL '\0'
  30. #define MAX_XRMSTRING   4096        /* max length of the Xrm DB string  */
  31. #define MAX_ERRMSG      1024        /* max length of error message      */
  32. #define MAX_CHILDREN    1024        /* max number of widget's children  */
  33. #define MAX_PATHNAME    1024        /* max length of the pathname       */
  34. #define INCR_ALLOC        32        /* initial incr of malloc'd arrays  */
  35. #define MAX_CALLBACKS     64            /* max callbacks per Xrm resource   */
  36. #define MAX_WIDGETS      512        /* max depth of a widget tree       */
  37. #define MAX_ROOT_WIDGETS  32        /* max # separate widget trees        */
  38. #define MAX_RES_FILES    512        /* max # res file names per interf  */
  39. #ifndef MAX_ARGS
  40. #define MAX_ARGS     128        /* max # args for callback / action */
  41. #define NAME_RESOLUTION     128        /* #chars resolving registered names*/
  42. #endif
  43.  
  44. /*
  45. *******************************************************************************
  46. * Private_type_declarations.
  47. *******************************************************************************
  48. */
  49.  
  50. typedef struct _WclRec
  51. {
  52.     /* Application Wide Resources - Fetched During Wcl Initialization
  53.     */
  54.     char*    resFiles;
  55.     char*    errorDatabaseFile;
  56.     char*    widgetResourceFiles;
  57.     char*    templateFiles;
  58.     Boolean    traceTemplateDef;
  59.     Boolean    verboseWarnings;
  60.     char*    dynamicLibs;        /* just to force conversion, not used */
  61.  
  62. } WclRec, *WclRecPtr, *Wcl;
  63.  
  64. typedef struct    _QuarkRec
  65. {
  66.     char*    string;        /* as seen in resource db        */
  67.     XrmQuark    quark;        /* made from lower case of string    */
  68. } QuarkRec;
  69.  
  70. typedef struct  _ResourceRec
  71. {
  72.     /* Pre-Creation Resources
  73.     */
  74.     Boolean         preCreateDump;    /* dump resources pre-create    */
  75.     XrmQuark        template;        /* name of template        */
  76.     Boolean        traceTemplate;    /* template trace required    */
  77.     Boolean         postTemplateDump;    /* dump resources post-template    */
  78.     QuarkRec        create;        /* WcMapFind gives class/constr    */
  79.     QuarkRec        className;        /* backward compatibility    */
  80.     QuarkRec        class;        /* backward compatibility    */
  81.     QuarkRec        constructor;    /* backward compatibility    */
  82.  
  83.     /* Post-Creation Resources
  84.     */
  85.     Boolean        trace;        /* creation trace required          */
  86.     Boolean         postCreateDump;    /* dump resources post-create        */
  87.     XtCallbackList  callback;        /* invoked after creation        */
  88.     char*        popups;        /* list of popup children to create */
  89.     char*        children;        /* list of children names to create */
  90.     Boolean        managed;        /* created  managed (default TRUE)  */
  91.     XtCallbackList  afterPopups;     /* invoked after popups created     */
  92.     XtCallbackList  afterChildren;     /* invoked after children created   */
  93.     XtCallbackList  afterManageChildren;/* invoked after kids are managed   */
  94.  
  95. } ResourceRec, *ResourceRecPtr;
  96.  
  97. /* Used by WcLateBinderCB for late binding of callbacks.
  98. */
  99. typedef struct _WcLateBind 
  100. {
  101.  XtAppContext    app;        /* Always seem to need an app!        */
  102.  Widget        widget;        /* widget invoking the callback        */
  103.  XtPointer    callData;    /* callback specific data from widget    */
  104.  
  105.  /* These are quarkified versions of what we saw as the callback resource
  106.   * value.  args is also specially derived from what we saw in the callback
  107.   * resource value (careful! see WcxClosureFromSeg() for concerns about
  108.   * being able to remove callbacks).
  109.   */
  110.  XrmQuark    libQ;        /* shared library abbreviation: -lXt    */
  111.  XrmQuark    classQ;        /* class, for methods            */
  112.  XrmQuark    nameQ;        /* case sensitive callback name        */
  113.  XrmQuark    nameq;        /* case insensitive callback name braindamage */
  114.  
  115.  /* These are needed for dynamic linking of shared libraries
  116.  */
  117.  char*        libFullPath;    /* if doing dynamic linking        */
  118.  void*        libHandle;    /* from dlopen()            */
  119.  
  120.  /* The callback procedure address which gets invoked.
  121.  */ 
  122.  XtCallbackProc    Callback;    /* what finally gets invoked        */
  123.  char*        args;        /* careful! see WcxClosureFromSeg()    */
  124.  XtPointer    regClosure;    /* client data as registered        */
  125.  XtPointer    object;        /* instance of the class - this changes */
  126.  
  127. } WcLateBindRec, *WcLateBind;
  128.  
  129. /*
  130. *******************************************************************************
  131. * Private_macro_definitions.
  132. *******************************************************************************
  133.     ONCE_PER_XtAppContext(app) should be invoked at the beginning of each 
  134.     function which performs registration, like WcRegisterWcCallbacks.
  135.     Note that this IS a macro: therefore, the return statement actually
  136.     causes the return from the registration function.
  137. */
  138.  
  139. #define ONCE_PER_XtAppContext( app )    \
  140. {                    \
  141.     static XtAppContext already[1024];    \
  142.     static int numApps = 0;        \
  143.     int i;                \
  144.                     \
  145.     for (i = 0; i < numApps ; i++)    \
  146.         if (app == already[i])        \
  147.             return;            \
  148.                     \
  149.     already[numApps++] = app;        \
  150. }
  151.  
  152. /*
  153.     -- converter done macro
  154. *******************************************************************************
  155.     This macro is invoked when a resource converter has completed the
  156.     conversion.  It is taken directly from the Xt Reference Manual which came
  157.     with Release 4 of the X11 Window System from MIT.
  158. */
  159.  
  160. #define done( type, value )             \
  161. {                        \
  162.     if ( toVal->addr != NULL )            \
  163.     {                        \
  164.     if ( toVal->size < sizeof( type ) )    \
  165.     {                    \
  166.         toVal->size = sizeof( type );    \
  167.         return;                \
  168.     }                    \
  169.     *(type*)(toVal->addr) = (value);    \
  170.     }                        \
  171.     else                    \
  172.     {                        \
  173.     static type static_val;            \
  174.     static_val = (value);            \
  175.     toVal->addr = (caddr_t)&static_val;    \
  176.     }                        \
  177.     toVal->size = sizeof(type);            \
  178.     return;                    \
  179. }
  180.  
  181. /* For compatibility with old Xt libraries
  182. */
  183. #ifndef XtIsWidget
  184. #ifdef XtSpecificationRelease
  185. #define XtIsWidget(obj) XtIsSubclass((obj),(WidgetClass)coreWidgetClass)
  186. #else
  187. #define XtIsWidget(obj) XtIsSubclass((obj),(WidgetClass)widgetClass)
  188. #endif
  189. #endif
  190.  
  191. /*
  192. *******************************************************************************
  193. * Private_function_declarations.
  194. *******************************************************************************
  195.     The following functions are generally private functions to the
  196.     WcCreate routines, but they may be defined in different files from
  197.     where they are used.  Client programs probably should not invoke
  198.     these functions directly.
  199. */
  200.  
  201. #if NeedFunctionPrototypes
  202. /****************************** ANSI FUNC DECLS ******************************/
  203. #define CONVERTER(arg) XrmValue*, Cardinal*, XrmValue*, XrmValue*
  204. #define CALLBACK(arg) Widget, XtPointer, XtPointer
  205. #define ACTION(arg) Widget, XEvent*, char**, Cardinal*
  206. #else
  207. /****************************** K&R FUNC DECLS ******************************/
  208. #define CONVERTER(arg) /**/
  209. #define CALLBACK(arg) /**/
  210. #define ACTION(arg) /**/
  211. #endif
  212.  
  213. /*  -- Wcl Initialization Procedures
  214. */
  215. extern void WcWarningInitialize        _(( XtAppContext, WclRecPtr ));
  216. extern void WcWidgetResourcesInitialize    _(( XtAppContext, WclRecPtr ));
  217. extern void WcTemplateInitialize    _(( XtAppContext, WclRecPtr ));
  218. extern void WcRegisterIntrinsic        _(( XtAppContext ));
  219. extern void WcAddConverters        _(( XtAppContext ));
  220. extern void WcRegisterWcCallbacks    _(( XtAppContext ));
  221. extern void WcRegisterWcActions        _(( XtAppContext ));
  222.  
  223. extern int WcMoreResourceFilesToLoad _(( Widget, WclRecPtr ));
  224.  
  225. /*  -- Wcl Templates
  226. */
  227. extern int WcApplyTemplate _(( XrmQuark, Widget, char*, int ));
  228.  
  229. /*  -- Support for providing sub-part resources for widgets (safe WcSetValues)
  230. */
  231. #define WcWidgetResourcesInitialize(a,w) /* not yet implemented */
  232.  
  233. /*  -- Find root widget of argument, remember if never seen before
  234. */
  235. extern Widget WcRootWidget _(( Widget ));
  236.  
  237. /*  -- Use HOME etc to find user's home directory (static storage of rtn val)
  238. */
  239. extern char* WcHomeDirectory _(( char* /*user*/ ));
  240.  
  241. /*  -- String to Widget Converter.  So libXmp and libXp can use easily
  242. */
  243. extern int wcWidgetCvtArgsCount;
  244. extern XtConvertArgRec wcWidgetCvtArgs[];
  245. extern void WcCvtStringToWidget _((XrmValue*, Cardinal*, XrmValue*, XrmValue*));
  246.  
  247. /*  -- Callback List stuff for Add/Remove callbacks
  248. */
  249. XtCallbackRec* WcStringToCallbackList _(( Widget, char* ));
  250. void WcFreeCallbackList _(( XtCallbackRec* ));
  251.  
  252. /*  -- Perform late binding of callbacks and methods - NOT REGISTERED!
  253. */
  254. extern void WcLateBinderCB _(( Widget, XtPointer, XtPointer ));
  255.  
  256. /*  -- Similar to XtWarningMsg()
  257. ================================================================
  258.     These use a Widget argument to identify the application context.
  259.  
  260.     1st str: name of procedure where problem occurred.
  261.     2nd str: name of warning message.
  262.     3rd str: default warning message.
  263.     4th... : args to be put in for %s in warning message.
  264.  
  265.   TIP:    Wherever possible, use no more than one argument - makes
  266.     translating or changing the messages ALOT easier.
  267. */
  268. #ifndef WCL_ERRORDB
  269. #define WCL_ERRORDB "/usr/lib/X11/WclErrorDB"
  270. #endif
  271. void WcWARN  _(( Widget, char*, char*, char* ));
  272. void WcWARN1 _(( Widget, char*, char*, char*, char* ));
  273. void WcWARN2 _(( Widget, char*, char*, char*, char*, char* ));
  274. void WcWARN3 _(( Widget, char*, char*, char*, char*, char*, char* ));
  275.  
  276. char* WcErrorDatabaseText _(( Widget, char*, char* ));
  277.  
  278. /*  -- Mapping Agents used by Wcl
  279. ================================================================
  280.     Need to have these visible only so macros below can be used.
  281. */
  282. extern MapAg wcAgent, cbAgent, cdAgent, clAgent, conAgent;
  283.  
  284. /*  -- Mapping Agent Access Macros
  285. =====================================================================
  286.     Used for consistent access to mapping agents.  If a single agent is
  287.     used for more than one type of data, be certain that the arguments
  288.     do NOT collide!
  289. */
  290.  
  291. /*============== wcAgent ==============*/
  292. #define WcMapWcl( app, wcl ) \
  293.     MapAg_Define( wcAgent, (app), NULL, NULL, (wcl) )
  294.  
  295. #define WcMapWclFind( app ) \
  296.     (WclRecPtr)MapAg_Find( wcAgent, (app), NULL, NULL )
  297.  
  298. #define WcMapDynLib( app, quark, name ) \
  299.     MapAg_Define( wcAgent, (app), (quark), 1, (name) )
  300.  
  301. #define WcMapDynLibFind( app, quark ) \
  302.     (char*)MapAg_Find( wcAgent, (app), (quark), 1 )
  303.  
  304. /*============== cbAgent ==============*/
  305. #define WcMapCallback( app, quark, cbRecPtr ) \
  306.     MapAg_Define( cbAgent, (app), (quark), NULL, (cbRecPtr) )
  307.  
  308. #define WcMapCallbackFind( app, quark ) \
  309.     (XtCallbackRec*)MapAg_Find( cbAgent, (app), (quark), NULL )
  310.  
  311. #define WcMapCallbackMethod( app, classQ, nameQ, cbRecPtr ) \
  312.     MapAg_Define( cbAgent, (app), (classQ), (nameQ), (cbRecPtr) )
  313.  
  314. #define WcMapCallbackMethodFind( app, classQ, nameQ ) \
  315.     (XtCallbackRec*)MapAg_Find( cbAgent, (app), (classQ), (nameQ) )
  316.  
  317. /*============== cdAgent ==============*/
  318. #define WcMapClosure( quark, string ) \
  319.     MapAg_Define( cdAgent, (quark), NULL, NULL, (string) )
  320.  
  321. #define WcMapClosureFind( quark ) \
  322.     (char*)MapAg_Find( cdAgent, (quark), NULL, NULL )
  323.  
  324. #define WcMapObject( wid, classQ, object ) \
  325.     MapAg_Define( cdAgent, (wid), (classQ), NULL, (object) )
  326.  
  327. #define WcMapObjectFind( wid, classQ ) \
  328.     (XtPointer)MapAg_Find( cdAgent, (wid), (classQ), NULL )
  329.  
  330. #define WcMapObjectForget( wid, classQ ) \
  331.     MapAg_Forget( cdAgent, (wid), (classQ), NULL )
  332.  
  333. /*============== conAgent ==============*/
  334. #define WcMapConstructor( app, quark, Constr ) \
  335.     MapAg_Define( conAgent, (app), (quark), NULL, (Constr) )
  336.  
  337. #define WcMapConstructorFind( app, quark ) \
  338.     (WcWidgetConstructor)MapAg_Find( conAgent, (app), (quark), NULL )
  339.  
  340. /*============== clAgent ==============*/
  341. #define WcMapClass( app, quark, class ) \
  342.     MapAg_Define( clAgent, (app), (quark), NULL, (class) )
  343.  
  344. #define WcMapClassFind( app, quark ) \
  345.     (WidgetClass)MapAg_Find( clAgent, (app), (quark), NULL )
  346.  
  347. #endif /* _WcCreateP_h */
  348.